【图论基础】链式前向星

2024年10月29日 作者头像 作者头像 Mochizuki 编辑

请输入图片描述

对于有向图的路径存储,有很多种方法,例如邻接表,邻接矩阵等。但是他们都有各自的局限性,而链式前向星几乎是有向图存储的最优解。

1.什么是链式前向星?

链式前向星是一种静态链表存储和集边数组储存,可以快速访问一个顶点所有的指向顶点,是一种在算法竞赛中常见的存储有向图的方式。

2.存储结构

通常来说,我们会使用

head[]来存储访问的头节点所存储最后一条边的值。

使用一个结构体来存储每条边的信息。

struct Edge
{
  int to;  //to表示指向的下一个顶点
  int w; //w表示这条边的值
  int next; //next表示该边指向的下一条边的值
}edge[];

3.存储方式

通常来讲,一般使用一个函数存储。

void add(int from,int to,int w)
{
  cnt++;
  edge[cnt].next=head[from];
  edge[cnt].to=to;
  edge[cnt].w=w;
  head[from]=cnt;
}

根据这个函数可以轻易看出来,我们将edge信息存储在一个有后往前访问的链式表中,而这就是链式前向星。

4.链式前向星的访问

for(int i=head[start_point];i;i=edge[i].next)
{
 int to=edge[i].to;
 // function

 //function end
}

5.总结

链式前向星是一种高效的有向图存储方式,善用链式前向星是在算法竞赛中高效解决图的问题的基础。

猜你喜欢